#include <cnix/types.h>

#define NR_KEYS 128

static unsigned short plain[NR_KEYS] = {
	0x0000,	0x001b,	0x0031,	0x0032,	0x0033,	0x0034,	0x0035,	0x0036,
	0x0037,	0x0038,	0x0039,	0x0030,	0x002d,	0x003d,	0x0008,	0x0009,
	0x0271,	0x0277,	0x0265,	0x0272,	0x0274,	0x0279,	0x0275,	0x0269,
	0x026f,	0x0270,	0x005b,	0x005d,	0x000d,	0x0165,	0x0261,	0x0273,
	0x0264,	0x0266,	0x0267,	0x0268,	0x026a,	0x026b,	0x026c,	0x003b,
	0x0027,	0x0060,	0x0164,	0x005c,	0x027a,	0x0278,	0x0263,	0x0276,
	0x0262,	0x026e,	0x026d,	0x002c,	0x002e,	0x002f,	0x0164,	0x002a,
	0x0166,	0x0020,	0x010d,	0x0110,	0x0111,	0x0112,	0x0113,	0x0114,
	0x0115,	0x0116,	0x0117,	0x0118,	0x0119,	0x010e,	0x010f,	0x0101,
	0x0103,	0x0107,	0x010a,	0x0105,	0x0109,	0x0106,	0x010b,	0x0102,
	0x0104,	0x0108,	0x010c,	0x007f,	0x000d,	0x0000,	0x003c,	0x011a,
	0x011b,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0100,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
};

static unsigned short shift[NR_KEYS] = {
	0x0000,	0x001b,	0x0021,	0x0040,	0x0023,	0x0024,	0x0025,	0x005e,
	0x0026,	0x002a,	0x0028,	0x0029,	0x005f,	0x002b,	0x0008,	0x0009,
	0x0051,	0x0057,	0x0045,	0x0052,	0x0054,	0x0059,	0x0055,	0x0049,
	0x004f,	0x0050,	0x007b,	0x007d,	0x000d,	0x0165,	0x0041,	0x0053,
	0x0044,	0x0046,	0x0047,	0x0048,	0x004a,	0x004b,	0x004c,	0x003a,
	0x0022,	0x007e,	0x0164,	0x007c,	0x005a,	0x0058,	0x0043,	0x0056,
	0x0042,	0x004e,	0x004d,	0x003c,	0x003e,	0x003f,	0x0164,	0x002a,
	0x0166,	0x00e7,	0x010d,	0x014c,	0x014d,	0x014e,	0x014f,	0x0150,
	0x0151,	0x0152,	0x0153,	0x0154,	0x0155,	0x010e,	0x010f,	0x0037,
	0x0038,	0x0167,	0x002d,	0x0034,	0x0035,	0x0036,	0x002b,	0x0031,
	0x0032,	0x0168,	0x0030,	0x002e,	0x000d,	0x0000,	0x003e,	0x0156,
	0x0157,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0100,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
};

static unsigned short alt[NR_KEYS] = {
	0x0000,	0x009b,	0x00b1,	0x00b2,	0x00b3,	0x00b4,	0x00b5,	0x00b6,
	0x00b7,	0x00b8,	0x00b9,	0x00b0,	0x00ad,	0x00bd,	0x0088,	0x0089,
	0x00f1,	0x00f7,	0x00e5,	0x00f2,	0x00f4,	0x00f9,	0x00f5,	0x00e9,
	0x00ef,	0x00f0,	0x00db,	0x00dd,	0x008d,	0x0165,	0x00e1,	0x00f3,
	0x00e4,	0x00e6,	0x00e7,	0x00e8,	0x00ea,	0x00eb,	0x00ec,	0x00bb,
	0x00a7,	0x00e0,	0x0164,	0x00dc,	0x00fa,	0x00f8,	0x00e3,	0x00f6,
	0x00e2,	0x00ee,	0x00ed,	0x00ac,	0x00ae,	0x00af,	0x0164,	0x00aa,
	0x0166,	0x00a0,	0x010d,	0x0128,	0x0129,	0x012a,	0x012b,	0x012c,
	0x012d,	0x012e,	0x012f,	0x0130,	0x0131,	0x010e,	0x010f,	0x011c,
	0x011e,	0x0122,	0x0125,	0x0120,	0x0124,	0x0121,	0x0126,	0x011d,
	0x011f,	0x0123,	0x0127,	0x00ff,	0x008d,	0x0000,	0x00bc,	0x0132,
	0x0133,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0100,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
};

static unsigned short altgr[NR_KEYS] = {
	0x0000,	0x009b,	0x00b1,	0x00b2,	0x00b3,	0x00b4,	0x00b5,	0x00b6,
	0x00b7,	0x00b8,	0x00b9,	0x00b0,	0x00ad,	0x00bd,	0x0088,	0x0089,
	0x00f1,	0x00f7,	0x00e5,	0x00f2,	0x00f4,	0x00f9,	0x00f5,	0x00e9,
	0x00ef,	0x00f0,	0x00db,	0x00dd,	0x008d,	0x0165,	0x00e1,	0x00f3,
	0x00e4,	0x00e6,	0x00e7,	0x00e8,	0x00ea,	0x00eb,	0x00ec,	0x00bb,
	0x00a7,	0x00e0,	0x0164,	0x00dc,	0x00fa,	0x00f8,	0x00e3,	0x00f6,
	0x00e2,	0x00ee,	0x00ed,	0x00ac,	0x00ae,	0x00af,	0x0164,	0x00aa,
	0x0166,	0x00a0,	0x010d,	0x0128,	0x0129,	0x012a,	0x012b,	0x012c,
	0x012d,	0x012e,	0x012f,	0x0130,	0x0131,	0x010e,	0x010f,	0x011c,
	0x011e,	0x0122,	0x0125,	0x0120,	0x0124,	0x0121,	0x0126,	0x011d,
	0x011f,	0x0123,	0x0127,	0x00ff,	0x008d,	0x0000,	0x00fc,	0x0132,
	0x0133,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0100,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
};

static unsigned short altsh[NR_KEYS] = {
	0x0000,	0x009b,	0x00a1,	0x00c0,	0x00a3,	0x00a4,	0x00a5,	0x00de,
	0x00a6,	0x00aa,	0x00a8,	0x00a9,	0x00df,	0x00ab,	0x0088,	0x0089,
	0x00d1,	0x00d7,	0x00c5,	0x00d2,	0x00d4,	0x00d9,	0x00d5,	0x00c9,
	0x00cf,	0x00d0,	0x00fb,	0x00fd,	0x008d,	0x0165,	0x00c1,	0x00d3,
	0x00c4,	0x00c6,	0x00c7,	0x00c8,	0x00ca,	0x00cb,	0x00cc,	0x00ba,
	0x00a2,	0x00fe,	0x0164,	0x00fc,	0x00da,	0x00d8,	0x00c3,	0x00d6,
	0x00c2,	0x00ce,	0x00cd,	0x00bc,	0x00be,	0x00bf,	0x0164,	0x00aa,
	0x0166,	0x00a0,	0x010d,	0x0158,	0x0159,	0x015a,	0x015b,	0x015c,
	0x015d,	0x015e,	0x015f,	0x0160,	0x0161,	0x010e,	0x010f,	0x00b7,
	0x00b8,	0x00b9,	0x00ad,	0x00b4,	0x00b5,	0x00b6,	0x00ab,	0x00b1,
	0x00b2,	0x00b3,	0x00b0,	0x00ae,	0x008d,	0x0000,	0x00be,	0x0162,
	0x0163,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0100,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
};

static unsigned short ctrl[NR_KEYS] = {
	0x0000,	0x001b,	0x0001,	0x0000,	0x0003,	0x0004,	0x0005,	0x001e,
	0x0007,	0x0008,	0x0009,	0x0000,	0x001f,	0x0000,	0x007f,	0x0009,
	0x0011,	0x0017,	0x0005,	0x0012,	0x0014,	0x0019,	0x0015,	0x0009,
	0x000f,	0x0010,	0x001b,	0x001d,	0x000a,	0x0165,	0x0001,	0x0013,
	0x0004,	0x0006,	0x0007,	0x0008,	0x000a,	0x000b,	0x000c,	0x0000,
	0x0000,	0x0000,	0x0164,	0x001c,	0x001a,	0x0018,	0x0003,	0x0016,
	0x0002,	0x000e,	0x000d,	0x0000,	0x0000,	0x0000,	0x00e9,	0x0000,
	0x0166,	0x00e6,	0x010d,	0x0140,	0x0141,	0x0142,	0x0143,	0x0144,
	0x0145,	0x0146,	0x0147,	0x0148,	0x0149,	0x010e,	0x010f,	0x0134,
	0x0136,	0x013a,	0x013d,	0x0138,	0x013c,	0x0139,	0x013e,	0x0135,
	0x0137,	0x013b,	0x013f,	0x007f,	0x000a,	0x0000,	0x0000,	0x014a,
	0x014b,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0100,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
};

/* none, shift, ctrl, lalt, alt(lalt | ralt) + shift, ctrl + ralt */
unsigned short * key_maps[] = {
	plain,	shift,	ctrl,	NULL,
	alt,	altsh,	NULL,	NULL,
	alt, 	altsh,	altgr,	NULL,
	NULL,	NULL,	NULL,	NULL
};
